iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
自我挑戰組

30天玩轉規劃LINE BOT系列 第 15

第15天:規劃資料庫(四)

  • 分享至 

  • xImage
  •  

接下來建立用戶資料庫,進入到github的【line-bot-sdk-python】

找到【get_profile】透過line bot api的get_profile方式將user_id導入,即可取得用戶的資料profile,資料內容即包含的用戶名稱(display_name)、用戶的Line user ID(user_id)、用戶頭像url(picture_url)、用戶的狀態消息(status_message)

會提交到pyCharm的程式碼:

profile = line_bot_api.get_profile(user_id)
print(profile.display_name)
print(profile.user_id)
print(profile.picture_url)
print(profile.status_message)

回到pyCharm,在handle_message底下,添加剛剛的程式碼,讓機器人去取得用戶的資訊。
將event中的user_id給匯入:
event.source.user_id
https://ithelp.ithome.com.tw/upload/images/20220930/20144761XtD3Lf7ZXz.png
舉的資料後儲存到profile中,然後將這些取得的資訊print出。
再來就是啟動sever測試看看。

開始run之後,可能會出現這個訊息,這是在說未來SQLAlchemy這項功能是預設關閉的,那想移除這樣的訊息,就明白定義是FALSE。
https://ithelp.ithome.com.tw/upload/images/20220930/20144761pkPitEGz5r.png

所以要加入設定程式碼,去定義為False:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
https://ithelp.ithome.com.tw/upload/images/20220930/20144761chqVgDJF2y.png

再來重啟SEVER測試看看,我對機器人互動一下,就會PRINT出我用戶的用戶名稱(display_name)、用戶的Line user ID(user_id)、用戶頭像url(picture_url)、用戶的狀態消息(status_message)
https://ithelp.ithome.com.tw/upload/images/20220930/20144761aOluazYBTS.png

那已經確定能抓到用戶資訊,接續就是要把這些資訊儲存到前面建立的資料庫中。

所以就需要建立user物件,會需要LINE用戶的user_id、用戶的display_name、用戶的picture_url,所以程式碼:
user = User(profile.user_id, profile.display_name, profile.picture_url)
在來使用SQLALCHEMY(DB)得session.add加入session中,然後再使用commit儲存至資料庫,程式碼:
db.session.add(user)
db.session.commit()
https://ithelp.ithome.com.tw/upload/images/20220930/20144761coaZOeRjHz.png

編輯好後,就一樣重新啟動SEVER,再與linebot互動一下後,進入pgadmin的Table,點選User再選View Data。
https://ithelp.ithome.com.tw/upload/images/20220930/20144761F2jyGL9Ol9.png

打開後就能看到,剛剛儲存的用戶資料。
https://ithelp.ithome.com.tw/upload/images/20220930/20144761n4dcHlpR0P.png

那為了的防止重複紀錄,就需要加上User.query去搜尋資料庫是否已經有這Line_ID,添加程式碼:
user = User.query.filter(User.line_id == event.source.user_id).first()
並加上判斷式(IF),如果USER不存在資料庫時,才會去索取USER的資料。
https://ithelp.ithome.com.tw/upload/images/20220930/20144761vfwNbdNOu2.png

完成後再重新啟動SEVER,試試看。
結果也很明顯,我自己在多餘的互動,都不會被line紀錄。這樣就達成我的目的。

下一篇,增加 line bot 機器人功能


上一篇
第14天:規劃資料庫(三)
下一篇
第16天:重構優化
系列文
30天玩轉規劃LINE BOT30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言